home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / data / etc / hahen.lzh / fxsp2lib.c < prev    next >
C/C++ Source or Header  |  1999-05-27  |  3KB  |  138 lines

  1. /* fxsp2lib.c */
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "fxsp2lib.h"
  7.  
  8. #define    SPRITE_MAX    256
  9. #define    FRAME_MAX    256
  10.  
  11. typedef struct {
  12.     signed short vx;    /* 相対座標データ */
  13.     signed short vy;    /* 相対座標データ */
  14.     unsigned short pt;    /* スプライトパターンNo. */
  15.     unsigned short rv;    /* 反転コード */
  16. } SP_WORK;
  17.  
  18. static int frame_no = 0;
  19. static int sprite_no = 0;
  20. static int sprite_no_max[FRAME_MAX];
  21. static char obj_fname[256];
  22. static char sp_fname[256];
  23. static int sp_size;
  24.  
  25. static SP_WORK sp_work[FRAME_MAX][SPRITE_MAX];
  26.  
  27.  
  28. void fxsp_init (char *f, char *sp_f, int size)
  29. {
  30.     strcpy (obj_fname, f);
  31.     strcpy (sp_fname, sp_f);
  32.     sp_size = size;
  33. }
  34.  
  35.  
  36.  
  37. short fxsp_on (void)
  38. {
  39.     return (0);
  40. }
  41.  
  42.  
  43.  
  44. /* xsp_set_st と置き換えて使うと引き数の構造体を .obj ファイルに書き出す */
  45. short fxsp_set_st (void *sp_work0)
  46. {
  47.     if (sprite_no < SPRITE_MAX) {
  48.         sp_work[frame_no][sprite_no].vx = ((SP_WORK *) sp_work0)->vx;
  49.         sp_work[frame_no][sprite_no].vy = ((SP_WORK *) sp_work0)->vy;
  50.         sp_work[frame_no][sprite_no].pt = ((SP_WORK *) sp_work0)->pt;
  51.         sp_work[frame_no][sprite_no].rv = ((SP_WORK *) sp_work0)->rv;
  52.  
  53.         sprite_no++;
  54.     }
  55.     return (0);
  56. }
  57.  
  58.  
  59.  
  60. short fxsp_out (void)
  61. {
  62.     short s = sprite_no;
  63.  
  64.     sprite_no_max[frame_no++] = sprite_no;
  65.     sprite_no = 0;
  66.  
  67.     return (s);
  68. }
  69.  
  70.  
  71.  
  72. static void write_pos (FILE * fp, signed short pos)
  73. {
  74.     signed short p = pos - 144;
  75.  
  76.     if (p < 0)
  77.         fprintf (fp, "-$%04hx    ", -p);
  78.     else
  79.         fprintf (fp, " $%04hx    ", p);
  80.  
  81.     return;
  82. }
  83.  
  84.  
  85.  
  86. short fxsp_off (void)
  87. {
  88.     FILE *fp;
  89.     int i, j, pr;
  90.  
  91.     if ((fp = fopen (obj_fname, "w")) == NULL) {
  92.         printf ("ファイルを書き込めません\n");
  93.         return (-1);
  94.     }
  95.     fprintf (fp, "\nPCG_FILE    =    %s    %d    * 使用する PCG データ\n"
  96.          "\n"
  97.          "XY_OFFSET    =    $0000    $0000    * 座標のオフセット\n"
  98.          "PT_OFFSET    =    $0000        * PCGパターンナンバーのオフセット\n"
  99.          "OBJ_RV        =    $0000        * 全体の反転コード\n"
  100.          "\n", sp_fname, sp_size);
  101.  
  102.  
  103.     for (i = 0; i < frame_no; i++) {
  104.         char no_str[16];
  105.         if (i == 0)
  106.             strcpy (no_str, "0");
  107.         else
  108.             strcpy (no_str, "NEXT");
  109.  
  110.         fprintf (fp,
  111.              "******************************** 複合スプライトパターン %3d ****\n\n"
  112.              "No.    =    %s    * 複合スプライトのパターンナンバー\n"
  113.              "            * 左から順に、X Y PT RV (以下同様)\n"
  114.              ,i, no_str);
  115.  
  116.  
  117.         for (pr = 0x3f; pr > 0; pr--) {
  118.             for (j = 0; j < sprite_no_max[i]; j++) {
  119.                 /* ソートして書き出す(ソートしてないけど) */
  120.                 if ((sp_work[i][j].rv & 0x3f) == pr) {
  121.                     fprintf (fp, "    ");
  122.                     write_pos (fp, sp_work[i][j].vx);
  123.                     write_pos (fp, sp_work[i][j].vy);
  124.  
  125.                     fprintf (fp, "$%04x    ", sp_work[i][j].pt);
  126.                     fprintf (fp, "$%04x\n", sp_work[i][j].rv);
  127.                 }
  128.             }
  129.         }
  130.         fprintf (fp, "\n\n");
  131.     }
  132.  
  133.     fclose (fp);
  134.  
  135.     return (0);
  136.  
  137. }
  138.